package clienteServidor;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

public class RespuestaServidor implements Serializable, Cloneable{

	private static final long serialVersionUID = -2197039686623599633L;
	
	private List<String> listaComandos;	
	private OrdenesServidor ordenesServidor;
	private DatoConfiguracion datoConfiguracion;
	private long numero;
	
	public RespuestaServidor(){
		this(null, new OrdenesServidor());
	}
	
	public RespuestaServidor(List<String> listaComandos, OrdenesServidor ordenesServidor) {
		this.listaComandos= listaComandos;
		this.ordenesServidor= ordenesServidor;
	}
	
	public static long getSerialversionuid() {
		return serialVersionUID;
	}

	public boolean isContinuarEjecucion(){
		return !this.isTerminarCliente();
	}
	
	protected void setApagar(boolean apagar) {
		this.ordenesServidor.setApagar(apagar);
	}
	
	public boolean isTerminarCliente() {
		return this.ordenesServidor.isTerminarCliente();
	}
	
	public boolean isApagar() {
		return this.ordenesServidor.isApagar();
	}
	
	public void continuarEjecucion() {
		this.ordenesServidor.setTerminarCliente(false);
	}
	
	public void terminarCliente() {
		this.ordenesServidor.setTerminarCliente(true);
	}

	public void apagar() {
		terminarCliente();
		this.ordenesServidor.setApagar(true);		
	}

	public OrdenesServidor getOrdenesServidor() {
		return ordenesServidor;
	}

	public List<String> obtenerComandos() {
		return listaComandos;
	}

	public void incrementarNumero(){
		this.numero++;
	}

	public DatoConfiguracion getDatoConfiguracion() {
		return datoConfiguracion;
	}

	public void setDatoConfiguracion(DatoConfiguracion datoConfiguracion) {
		this.datoConfiguracion = datoConfiguracion;
	}

	@Override
	public String toString() {
		return "RespuestaServidor [listaComandos=" + listaComandos
				+ ", ordenesServidor=" + ordenesServidor
				+ ", datoConfiguracion=" + datoConfiguracion + ", numero="
				+ numero + "]";
	}

	@SuppressWarnings("unchecked")
	public Object clone(){
		RespuestaServidor rs= null;
		try {
			rs= (RespuestaServidor) super.clone();
			rs.ordenesServidor= (OrdenesServidor) this.ordenesServidor.clone();
			rs.listaComandos= (List<String>) ((ArrayList<String>)this.listaComandos).clone();
			rs.datoConfiguracion= (DatoConfiguracion) this.datoConfiguracion.clone();
		} catch (CloneNotSupportedException e) {
			e.printStackTrace();
		}
		return rs;
	}
}
